#include <iostream>
#include <cstdio>
#include <cstring>
#include <unistd.h>
#include <sys/wait.h>
using namespace std;

class File
{
private:
    FILE *pf;

public:
    // 这个构造函数可以传入文件名和打开文件的方式
    File(const char *pFileName, const char *pMode)
    {
        open(pFileName, pMode);
    }

    // 这个构造函数很懒，什么事情也不做
    File()
    {
        pf = NULL;
        cout << "你选择了一开始不打开文件" << endl;
    }

    // 用来打开一个文件的函数
    bool open(const char *pFileName, const char *pMode)
    {
        pf = fopen(pFileName, pMode);
        if (pf == NULL)
        {
            cout << "打开文件失败!" << endl;
        }
        return 1;
    }

    // 用来读取文件内容的函数
    void read()
    {
        if (pf == NULL)
        {
            cout << "文件没有打开" << endl;
            return;
        }
        char ch;
        while ((ch = fgetc(pf)) != EOF)
        {
            cout << ch;
        }
    }

    // 用来写入文件内容的函数
    void write(const char *pStr)
    {
        if (pf == NULL)
        {
            cout << "文件没有打开" << endl;
            return;
        }
        fputs(pStr, pf);
        fputs("\n", pf);
    }

    ~File()
    {
        if (pf != NULL)
        {
            fclose(pf);
        }
        cout << "析构函数被调用" << endl;
    }
};

int main()
{
    pid_t pid = fork();
    if (pid < 0)
    {
        cout << "创建子进程失败" << endl;
        return 0;
    }
    if (pid == 0)
    {
        File f("1.txt", "r");
        f.read(); 
    }
    else
    {
        File f("1.txt", "w");
        f.write("hello world !ashdjashdkah sdkjashdjkahsdk");
        wait(NULL);
    }

    return 0;
}
